昨天我們講解了什麼是FileBeat,以及如何使用FileBeat,蒐集我們昨天提供的nginx access logs以及error logs。今天我們進一步講解,當透過FileBeat Listen後,如何蒐集Log,以及蒐集後會如何建構以及應用。
昨天我們講解到透過 filebeat.ext -e 去啟動後,你會發現cmd視窗會停留在它啟動後的介面,並且有一堆文字跑出來。按照昨天的設計,我們會蒐集在D:/nginx裡面的logs,因此這個意思就是它的設定已經完備,並且正在監聽中。若你本來裡面就有存放Log,它就會開始將這些log上傳。
接著我們檢視一下elasticsearch中的index
透過 _cat/indices 我們可以檢視目前的所有indices
可以看到如下圖,出現一個filebeat開頭的index,而這就是剛剛我們監聽後上傳建立的,後面會是你建構當天的日期,而這部分其實是可以隨著你每天上傳按天建立index。
接著我們可以看一下裡面的內容,你會發現昨天那樣的格式,會透過filebeat中預設的module去parse,parse成固定的格式,而像是ip這種,就會變建構成是elasticsearch中ip的type mapping。
以下是其中一個nginx access log parse以後的範例。
{
"_index": "filebeat-7.9.1-2020.09.26-000001",
"_type": "_doc",
"_id": "rxCDyHQBY_yROqwhvmiM",
"_score": 1.0,
"_source": {
"agent": {
"hostname": "LAPTOP-MF7528EO",
"name": "LAPTOP-MF7528EO",
"id": "184d5cf6-3b5d-4bf2-8747-c8bfeba52d42",
"type": "filebeat",
"ephemeral_id": "e0b2ad1d-f970-4006-b871-27d346294ede",
"version": "7.9.1"
},
"nginx": {
"access": {
"remote_ip_list": [
"10.191.100.120"
]
}
},
"log": {
"file": {
"path": "d:\\nginx\\access.log-20200916"
},
"offset": 3422
},
"source": {
"address": "10.191.100.120",
"ip": "10.191.100.120"
},
"fileset": {
"name": "access"
},
"url": {
"original": "/software"
},
"input": {
"type": "log"
},
"@timestamp": "2020-09-15T07:27:18.000Z",
"ecs": {
"version": "1.5.0"
},
"related": {
"ip": [
"10.191.100.120"
]
},
"service": {
"type": "nginx"
},
"host": {
"hostname": "LAPTOP-MF7528EO",
"os": {
"build": "18362.1082",
"kernel": "10.0.18362.1082 (WinBuild.160101.0800)",
"name": "Windows 10 Home",
"family": "windows",
"version": "10.0",
"platform": "windows"
},
"ip": [
"fe80::e162:91cb:77a1:f325",
"169.254.243.37",
"fe80::99a5:fa82:c931:8fb4",
"192.168.99.1",
"fe80::34fd:84f7:c91f:5da5",
"169.254.93.165",
"fe80::344f:84b5:2b0a:e515",
"169.254.229.21",
"2001:b400:e203:361d:c86:26ba:ebc1:7594",
"2001:b400:e203:361d:39f4:6a4:8631:97d4",
"fe80::c86:26ba:ebc1:7594",
"172.20.10.2",
"fe80::f480:aacb:2042:8b9b",
"172.20.10.4",
"fe80::a1b3:725b:996e:7f19",
"169.254.127.25"
],
"name": "LAPTOP-MF7528EO",
"id": "4b60979b-7b54-4911-b8ba-c81d2b2ecb00",
"mac": [
"00:19:21:aa:aa:aa",
"0a:00:27:00:00:05",
"c0:b6:f9:11:e3:66",
"c2:b6:f9:11:e3:65",
"92:8c:43:84:9f:ca",
"c0:b6:f9:11:e3:65",
"c0:b6:f9:11:e3:69"
],
"architecture": "x86_64"
},
"http": {
"request": {
"method": "GET"
},
"response": {
"status_code": 200,
"body": {
"bytes": 492675
}
},
"version": "1.1"
},
"event": {
"timezone": "+08:00",
"created": "2020-09-26T03:45:09.165Z",
"kind": "event",
"module": "nginx",
"category": [
"web"
],
"type": [
"access"
],
"dataset": "nginx.access",
"outcome": "success"
},
"user_agent": {
"original": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36",
"os": {
"name": "Windows",
"version": "10",
"full": "Windows 10"
},
"name": "Chrome",
"device": {
"name": "Other"
},
"version": "84.0.4147.125"
}
}
}
可以看到它將其中的拜訪IP、名稱、UserAgent,以及拜訪節點等等都解析出來,而這些解析出來的欄位,我們就可以應用在查詢以及視覺化上。
這邊也提到一下,當這樣子透過filebeat setup後,你可以看一下Kibana上的Dashboard區,你會發現多了很多預設的Dashboard,如下圖:
其中我們找到我們預設的nginx module,點開後就可以看到剛剛丟進去的資料,已經被視覺化到Dashboard上。
這邊記得右上角要filter時間範圍是在上傳的log時間內,否則就不會有資料顯示喔!
如此一來,大致上我們就知道一整套流程,也就是一開始說的,透過filebeat(logstash)等等 接著可以透過logstash去正規化log,存到elasticsearch上,接著可以用來查詢;Kibana也能應用這個資訊去進行視覺化。
今天我們把昨天一套簡單的透過filebeat上傳的流程講解完,初步讓大家有個概念,接著我們就會透過docker-compose去實作整套,並且在這過程中會提到不同狀況的調整(例如多種Log時要如何設定filebeat,以及按照日期拆分)又或者是自生成(非屬於各項default)log的時候該如何解析